You are here: Symbol Reference > Dew Namespace > Dew.Signal Namespace > Dew.Signal.Units Namespace > Classes > SignalUtils Class > SignalUtils Methods > SignalUtils.KaiserFirLength Method
Dew Signal for .NET
ContentsIndexHome
PreviousUpNext
SignalUtils.KaiserFirLength Method

Estimate the length of a windowed FIR filter.

Syntax
C#
Visual Basic
public static int KaiserFirLength(double[] W, double Ripple, double FS);

Returns the length of the FIR filter, windowed with the Kaiser window, where the maximum allowed ripple of the pass band is Ripple and sampling frequency is FS. The W array holds two parameters: the start and the stop of the narrowest transition band, relative to the specified sampling frequency. 

The equation can be found in [1] p. 453, eq. 7.93. The length of the filter designed with kaiser window is about 10% bigger then the length of the filter with the same specifications designed with the remez algorithm. The ripple of the passband and the stopband attenuation of a FIR filter designed with a Kaiser window are related with the equations:

Att[dB] = -20*Log10(Ripple); Ripple = Exp10(Att/-20);

References:  

[1] Discrete-time signal processing, Oppenheim and Schafer, Prentice-Hall, 1989.

Design a highpass filter with at least 80 dB attenuation in the stopband and not more then 0.0001 ripple in the passband. Transition band is between 0.5 and 0.6 Hz. Sampling frequency is 2 Hz.

using Dew.Math; using Dew.Math.Editors; using Dew.Math.Units; using Dew.Signal; using Dew.Signal.Units; using Dew.Math.Tee; using Dew.Signal.Tee; private void button1_Click(object sender, EventArgs e) { Vector h = new Vector(0); Vector response = new Vector(0); double FS = 2; double Ripple = 0.0001; int n = SignalUtils.KaiserFirLength(new double[2] {0.5,0.6}, Ripple, FS); n = Math387.EnsureRange(4, n, SignalUtils.MaxFirLength); if (n % 2 == 0) { n++; //must be odd, if passband at FS/2 } SignalUtils.FirImpulse(h.Size(n), new double[2] { 0.5, 0.6 }, TFilterType.ftHighpass, FS); //get impulse response SignalUtils.Kaiser(h,SignalUtils.KaiserBetaFir(Ripple)); //apply Kaiser window SignalUtils.FrequencyResponse(h,null,response,8,false,TSignalWindowType.wtRectangular,0); //zero padd by 8x MtxVecTee.DrawIt(20*MtxExpr.Log10(MtxExpr.Abs(response)),"Highpass FIR filter",false); }
Copyright (c) 1999-2024 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!